package com.ash.mapper.book;

import com.ash.domain.Books;
import com.ash.domain.vo.BooksVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.lang.Nullable;

import java.util.List;

/**
 * @author : Chen Chao
 * @encoding : UTF-8
 * @date : 2021/3/23 16:23
 * @file : project06.com.ash.mapper.book.BookMapper.java
 * @software : IntelliJ IDEA
 * @since : 1.8
 */
public interface BooksMapper {
    /**
     * 根据书籍类型和书籍名称进行筛选书籍
     *
     * @param bookTypes  要查询的书籍类型
     * @param others     是否查询无类型的图书
     * @param searchName 要模糊查询的书籍名称
     * @return 查询的书籍列表
     */
    List<Books> selectByTypeAndName(@Nullable @Param("bookTypes") List<Integer> bookTypes, @Nullable @Param("others") String others,
                                    @Nullable @Param("searchName") String searchName);

    /**
     * 查询所有书籍
     *
     * @return 返回所有书籍列表
     */
    List<Books> selectAll();

    /**
     * 查询要审核的书籍
     * @param startIndex 页数
     * @param limit 每页容量
     * @return 书籍列表
     */
    List<BooksVo> selectToCheck( @Param("startIndex") Integer startIndex, @Param("limit") Integer limit);

    /**
     * 查询要审核的书籍列表数量
     * @return  列表数量
     */
    Integer selectToCheckCount();
    /**
     * 根据id进行审核
     * @param bid 书籍的id
     * @return 受影响行数
     */
    int check(@Param("bid") int bid);
    /**
     * 根据id进行批量删除
     * @param ids 要删除的ids
     * @return 受影响行数
     */
    int checkByIds(@Param("ids") List<Integer> ids);
    /**
     * 根据id查询书籍
     * @param bid bid
     * @return 查询的书籍
     */
    Books selectById(@Param("bid") Integer bid);
    /**
     * 分页查询所有数据
     * @param startIndex 页数
     * @param limit 每页数量
     * @return 当前页的书籍列表
     */
    List<BooksVo> selectAll(@Nullable @Param("bname") String bname, @Param("startIndex") Integer startIndex, @Param("limit") Integer limit);
    /**
     * 分页查询数据的数量
     * @param bname 模糊查询的书名
     * @return 当前页的用户列表
     */
    int dataCount(@Nullable @Param("bname") String bname);
    /**
     * 根据uid进行删除操作
     * @param bid 用户id
     * @return 受影响行数
     */
    int delete(int bid);
    /**
     * 根据id进行批量删除
     * @param ids 要删除的ids
     */
    int deleteByIds(@Param("ids") List<Integer> ids);

    /**
     * 添加书籍信息
     * @param books 封装书籍信息的对象
     * @return 受影响的行数
     */
    Integer add(Books books);

    /**
     * 根据id设置书籍数量
     * @param bid bid
     * @param count count
     * @return 受影响的行数
     */
    Integer setCountById(@Param("bid")Integer bid,@Param("count")Integer count);

    /**
     * 选择用户喜欢的书籍
     * @param mid mid
     * @param grade grade
     * @param startIndex starIndex
     * @param limit limit
     * @return 书籍列表
     */
    List<BooksVo> selectLikeAll(@Nullable @Param("mid")Integer mid,
                                @Nullable @Param("grade")Integer grade,
                                @Param("startIndex") Integer startIndex,
                                @Param("limit") Integer limit);

    /**
     * 查询喜欢书籍的数量
     * @param mid mid
     * @param grade grade
     * @return 受影响的行数
     */
    Integer selectLikeCount(@Nullable @Param("mid")Integer mid,
                            @Nullable @Param("grade")Integer grade);
}
